package ipl.projet.servlets;

import ipl.projet.domaine.Partie;
import ipl.projet.domaine.Partie.Etat;
import ipl.projet.domaine.Vaisseau;
import ipl.projet.exceptions.CoordonneException;
import ipl.projet.exceptions.PartieInconnueException;
import ipl.projet.usecase.UccStarTrek;

import java.io.IOException;
import java.util.List;

import javax.ejb.EJB;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Placement extends HttpServlet implements Servlet {
	private static final long serialVersionUID = 1L;

	@EJB
	private UccStarTrek ucc;

	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		HttpSession sessionTEST = request.getSession();
		if (sessionTEST == null || sessionTEST.getAttribute("login") == null) {
			response.sendRedirect(response
					.encodeRedirectURL("connexion.html?erreur=1"));
			return;
		}
		
		/**
		 * TODO A SUPPRIMER
		 */

		/*
		String partieTEST = (String) sessionTEST.getAttribute("partie");
		String joueurTEST = (String) sessionTEST.getAttribute("login");
		if(partieTEST != null) {
			try {
				ucc.placerVaisseau(partieTEST, joueurTEST,
						"RAVEN", 0, 0, 0, 1);
				ucc.placerVaisseau(partieTEST, joueurTEST,
						"NX_CLASS", 0, 2, 0, 4);
				ucc.placerVaisseau(partieTEST, joueurTEST,
						"SARAJEVO", 0, 5, 0, 7);
				ucc.placerVaisseau(partieTEST, joueurTEST,
						"STEAMRUNNER", 1, 0, 1, 3);
				ucc.placerVaisseau(partieTEST, joueurTEST,
						"SOVEREIGN", 1, 4, 1, 8);
			} catch (CoordonneException e1) {
				System.out.println("PROBLEME DANS LE REMPLISSAGE AUTOMATIQUE DE VAISSEAUX !");
				e1.printStackTrace();
			} catch (PartieInconnueException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			response.sendRedirect(response.encodeRedirectURL("partieEnCours.html"));
			return;
		}
		*/
		
		/**
		 * TODO A SUPPRIMER
		 */
		
		if (request.getParameter("ajax") != null) {
			HttpSession session = request.getSession();
			String partieEnCours = (String) session.getAttribute("partie");
			try {
				Partie partie = ucc.getPartie(partieEnCours);
				if (partie.getEtat() == Etat.ANNULEE
						|| partie.getEtat() == Etat.EN_ATTENTE
						|| partie.getEtat() == Etat.FINIE) {
					response.getWriter().write("KO");
					return;
				}
				if (partie.getEtat() == Etat.EN_COURS) {
					response.getWriter().write("OK");
					return;
				}
			} catch (PartieInconnueException e) {
				response.getWriter().write("KO");
				return;
			}
		}

		HttpSession session = request.getSession();
		String partie = (String) session.getAttribute("partie");
		String login = (String) session.getAttribute("login");
		List<Vaisseau> listeVaisseaux = null;
		try {
			listeVaisseaux = ucc.listerVaisseaux(partie, login);
		} catch (PartieInconnueException e) {
			response.sendRedirect(response
					.encodeRedirectURL("accueil.html?erreur=3"));
		}

		String tableau[][] = new String[10][10];
		for (int ligne = 0; ligne < 10; ligne++) {
			for (int colonne = 0; colonne < 10; colonne++) {
				tableau[ligne][colonne] = null;
			}
		}
		int nbrVaisseauxPlaces = 0;
		
		for (Vaisseau vaisseau : listeVaisseaux) {
			if (vaisseau.estPlace()) {
				nbrVaisseauxPlaces++;
				int num = 1;
				if (vaisseau.estHorizontal()) {
					for (int i = vaisseau.getCoordonneeDebut().getX(); i <= vaisseau
							.getCoordonneeFIN().getX(); i++) {
						tableau[vaisseau.getCoordonneeDebut().getY()][i] = vaisseau
								.getType().shipName() + "-h-" + num++;
					}
				} else {
					for (int i = vaisseau.getCoordonneeFIN().getY(); i >= vaisseau
							.getCoordonneeDebut().getY(); i--) {
						tableau[i][vaisseau.getCoordonneeDebut().getX()] = vaisseau
								.getType().shipName() + "-v-" + num++;
					}
				}
			}
		}

		if (nbrVaisseauxPlaces == 5) {
			Partie partieEnCours = null;
			try {
				partieEnCours = ucc.getPartie(partie);
			} catch (PartieInconnueException e) {
				response.sendRedirect(response
						.encodeRedirectURL("accueil.html?erreur=3"));
			}
			if (partieEnCours.getEtat() == Etat.EN_COURS) {
				response.sendRedirect(response.encodeRedirectURL("partieEnCours.html"));
				return;
			} else {
				request.setAttribute("placementTermine", true);
			}
		}

		request.setAttribute("tableau", tableau);
		request.setAttribute("listeVaisseaux", listeVaisseaux);

		getServletContext().getNamedDispatcher("placement.html").forward(
				request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		String partie = (String) session.getAttribute("partie");
		String joueur = (String) session.getAttribute("login");
		int xDeb = Integer.parseInt(request.getParameter("coord_x_debut"));
		int yDeb = Integer.parseInt(request.getParameter("coord_y_debut"));
		int xFin = Integer.parseInt(request.getParameter("coord_x_fin"));
		int yFin = Integer.parseInt(request.getParameter("coord_y_fin"));

		try {
			ucc.placerVaisseau(partie, joueur,
					request.getParameter("vaisseau"), xDeb, yDeb, xFin, yFin);
		} catch (CoordonneException e) {
			
		} catch (PartieInconnueException e) {
			response.sendRedirect(response
					.encodeRedirectURL("accueil.html?erreur=3"));
		}
		doGet(request, response);
	}
}
